A graphical user interface (GUI) is one technology that allows a person to interact with an underlying application. However, it is sometimes beneficial to allow a process to interact with the GUI. The process may facilitate observing, manipulating, repurposing, and/or summarizing the application associated with the GUI. For example, a repurposing logic may be designed to modify a GUI of a website for mobile devices. In another example, a software testing logic may track and replay user inputs to a GUI. Logics that interact with GUIs sometimes associate a specific functionality to individual elements of a GUI. This may require that the GUI be broken down into component elements. However, it can sometimes be difficult for a logic to determine where GUI components begin and/or end. Collecting data describing how GUI components are related to other nearby GUI components adds another layer of complexity to this task.
Conventional GUI segmentation techniques sometimes rely on information contained in a run time object hierarchy (e.g., a document object model (DOM)) to differentiate portions of a GUI. However, in some cases an object hierarchy may not exist or may not contain useful information. For example, a FLASH® application in a webpage may contain multiple GUI elements but the DOM for the website could describe the entirety of the FLASH® application as a single entity. In another example, some Web 2.0 development toolkits may not adequately describe semantic information for some run-time objects. Thus, when hierarchy information is unavailable, conventional GUI segmentation tools may be unable to accurately partition a GUI.